<?php

namespace Template\Compiler\Transformer;

/**
 * Абстрактный класс транформатора.
 *
 * @package Template
 */
abstract class ATransformer {

    /**
     * Получить класс исключения.
     *
     * @param string $message
     * @param integer $code
     * @param \Exception $previous
     * @return mixed
     */
    public function getException ($message = '', $code = 0, \Exception $previous = null) {
        $namespace = explode('\\', get_class($this));
        array_pop($namespace);
        $namespace = implode('\\', $namespace);
        $classname = $namespace . '\\CException';
        return new $classname($message, $code, $previous);
    }

    /**
     * Получить экземпляр класса.
     *
     * @return static
     */
    public static function getInstance () {
        return new static();
    }

}
